﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace db
{
    public class Datos
    {
        private static Datos _instance = null;
        private DB modelo;
       

        //Constructor
        protected Datos()
        {
            modelo = new DB();
         
        }

        public static Datos getInstance()
        {
            if (_instance == null)
            {
                _instance = new Datos();
            }
            return _instance;
        }



        public ObservableCollection<Deposito> GetDepositos()
        {
            
            var lista = from d in modelo.Deposito
                        select d;
            
            return new ObservableCollection<Deposito>(lista);
        }

        public Deposito GetDepositoActual()
        {
            
            var par = (from d in modelo.Configuraciones
                       where d.Parametro == "DepositoActual"
                       select d).Single();
            int id = Int32.Parse(par.Valor);
            Deposito actual = (from d in modelo.Deposito
                               where d.DepositoID == id
                               select d).Single();

            return actual;

        }

        public ObservableCollection<Remito> getRemitosSector(Sector s)
        {
            if (s != null)
            {
                var remitos = from r in modelo.Remito
                              where r.Sector.SectorID == s.SectorID
                              select r;
                return new ObservableCollection<Remito>(remitos);
            }
            else
                return null;
        }

        public ObservableCollection<Remito> getRemitosSectorFecha(Sector s, DateTime ini, DateTime fin)
        {
              var remitos = from r in modelo.Remito
                          where r.Sector.SectorID == s.SectorID 
                          && r.Fecha >= ini 
                          && r.Fecha <= fin
                          select r;
              return new ObservableCollection<Remito>(remitos);

        }
        public ObservableCollection<Remito> getRemitosFecha(DateTime ini, DateTime fin)
        {
            var remitos = from r in modelo.Remito
                          where r.Fecha >= ini
                          && r.Fecha <= fin
                          select r;
            return new ObservableCollection<Remito>(remitos);

        }

        public List<Proveedor> GetProveedores()
        {
            var lista = from p in modelo.Proveedor
                        select p;
                       
            return lista.ToList<Proveedor>();
        }
        public bool InsertarRemito(Remito r)
        {
            bool salida = false;
            try
            {
                modelo.Remito.AddObject(r);
              
                modelo.SaveChanges();
                salida = true;
                
            }
            catch (Exception e)
            {

            }
            return salida;

        }
        public void EstablecerDepositoActual(Deposito dActual)
        {
            Configuraciones par = (from d in modelo.Configuraciones
                                   where d.Parametro == "DepositoActual"
                                   select d).Single();

            par.Valor = dActual.DepositoID.ToString();
            modelo.SaveChanges();


        }




    }
}
